#include<iostream>
#include<cstring>
using namespace std;
int next1[1000005];
long long ans;
void buildnext(char *a) {
    next1[0] = -1;
    int k = -1;
    int len = strlen(a);  // 获取字符串长度
    for (int j = 0; j < len; j++) {
        while (k >= 0 && a[k] != a[j]) {
            k = next1[k];  // 使用 next 数组进行跳转
        }
        k++;
        next1[j + 1] = k;
        if(next1[k]>0)next1[j+1]=next1[k];
        if(next1[j+1]>0)ans=ans-next1[j+1]+j+1;
    }
}
char a[2000050];  // 字符数组用于存储输入字符串
int main() {
    int n;
    cin >> n;  // 读取 n
    cin >> a;  // 读取字符串
    buildnext(a);  // 构建 next 数组
 // 结果变量初始化 // 初始输出 1
 // 获取字符串长度
    // // for(int i=0;i<=strlen(a);i++)cout<<next1[i]<<" ";
    cout << ans;  // 输出最终结果
}
